﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using ABC_SA_DM;

namespace ABC_SA_DAL
{
    public class Cliente_DAL
    {
        //******************Procedimientos almacenados******************//

        //Ingresa un cliente a la tabla cliente
        public bool Ingresar(Cliente c) {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "InsertaCliente";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlParameter spUsuario = new SqlParameter();
                spUsuario.ParameterName = "@usuario";
                spUsuario.Value = c.UserName;
                spUsuario.Direction = System.Data.ParameterDirection.Input;
                spUsuario.DbType = System.Data.DbType.String;

                SqlParameter spNombre = new SqlParameter();
                spNombre.ParameterName = "@nombre";
                spNombre.Value = c.Nombre;
                spNombre.Direction = System.Data.ParameterDirection.Input;
                spNombre.DbType = System.Data.DbType.String;

                SqlParameter spApellidoPat = new SqlParameter();
                spApellidoPat.ParameterName = "@apellido_pat";
                spApellidoPat.Value = c.ApellidoPat;
                spApellidoPat.Direction = System.Data.ParameterDirection.Input;
                spApellidoPat.DbType = System.Data.DbType.String;

                SqlParameter spApellidoMat = new SqlParameter();
                spApellidoMat.ParameterName = "@apellido_mat";
                spApellidoMat.Value = c.ApellidoMat;
                spApellidoMat.Direction = System.Data.ParameterDirection.Input;
                spApellidoMat.DbType = System.Data.DbType.String;

                SqlParameter spIdentificacion = new SqlParameter();
                spIdentificacion.ParameterName = "@identificacion";
                spIdentificacion.Value = c.Identificacion;
                spIdentificacion.Direction = System.Data.ParameterDirection.Input;
                spIdentificacion.DbType = System.Data.DbType.String;

                SqlParameter spNacionalidad = new SqlParameter();
                spNacionalidad.ParameterName = "@nacionalidad";
                spNacionalidad.Value = c.Nacionalidad;
                spNacionalidad.Direction = System.Data.ParameterDirection.Input;
                spNacionalidad.DbType = System.Data.DbType.String;

                SqlParameter spCorreo = new SqlParameter();
                spCorreo.ParameterName = "@correo";
                spCorreo.Value = c.Email;
                spCorreo.Direction = System.Data.ParameterDirection.Input;
                spCorreo.DbType = System.Data.DbType.String;

                cmd.Parameters.Add(spUsuario);
                cmd.Parameters.Add(spNombre);
                cmd.Parameters.Add(spApellidoPat);
                cmd.Parameters.Add(spApellidoMat);
                cmd.Parameters.Add(spIdentificacion);
                cmd.Parameters.Add(spNacionalidad);
                cmd.Parameters.Add(spCorreo);

                cmd.ExecuteNonQuery();

                conn.Close();
                return true;
            }
            catch (Exception e) 
            {
                conn.Close();
                return false;
            }        
        }

        //inserta una actualizacion del cliente en la base de datos
        public bool ModificarClienteNuevo(Cliente c) {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            try
            {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "InsertaCliente";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlParameter spId = new SqlParameter();
                spId.ParameterName = "@id_cliente";
                spId.Value = c.IdCliente;
                spId.Direction = System.Data.ParameterDirection.Input;
                spId.DbType = System.Data.DbType.Int32;

                SqlParameter spUsuario = new SqlParameter();
                spUsuario.ParameterName = "@usuario";
                spUsuario.Value = c.UserName;
                spUsuario.Direction = System.Data.ParameterDirection.Input;
                spUsuario.DbType = System.Data.DbType.String;

                SqlParameter spNombre = new SqlParameter();
                spNombre.ParameterName = "@nombre";
                spNombre.Value = c.Nombre;
                spNombre.Direction = System.Data.ParameterDirection.Input;
                spNombre.DbType = System.Data.DbType.String;

                SqlParameter spApellidoPat = new SqlParameter();
                spApellidoPat.ParameterName = "@apellido_pat";
                spApellidoPat.Value = c.ApellidoPat;
                spApellidoPat.Direction = System.Data.ParameterDirection.Input;
                spApellidoPat.DbType = System.Data.DbType.String;

                SqlParameter spApellidoMat = new SqlParameter();
                spApellidoMat.ParameterName = "@apellido_mat";
                spApellidoMat.Value = c.ApellidoMat;
                spApellidoMat.Direction = System.Data.ParameterDirection.Input;
                spApellidoMat.DbType = System.Data.DbType.String;

                SqlParameter spIdentificacion = new SqlParameter();
                spIdentificacion.ParameterName = "@identificacion";
                spIdentificacion.Value = c.Identificacion;
                spIdentificacion.Direction = System.Data.ParameterDirection.Input;
                spIdentificacion.DbType = System.Data.DbType.String;

                SqlParameter spNacionalidad = new SqlParameter();
                spNacionalidad.ParameterName = "@nacionalidad";
                spNacionalidad.Value = c.Nacionalidad;
                spNacionalidad.Direction = System.Data.ParameterDirection.Input;
                spNacionalidad.DbType = System.Data.DbType.String;

                SqlParameter spCorreo = new SqlParameter();
                spCorreo.ParameterName = "@correo";
                spCorreo.Value = c.Email;
                spCorreo.Direction = System.Data.ParameterDirection.Input;
                spCorreo.DbType = System.Data.DbType.String;

                cmd.Parameters.Add(spId);
                cmd.Parameters.Add(spUsuario);
                cmd.Parameters.Add(spNombre);
                cmd.Parameters.Add(spApellidoPat);
                cmd.Parameters.Add(spApellidoMat);
                cmd.Parameters.Add(spIdentificacion);
                cmd.Parameters.Add(spNacionalidad);
                cmd.Parameters.Add(spCorreo);

                cmd.ExecuteNonQuery();

                conn.Close();
                return true;
            }
            catch (Exception e)
            {
                conn.Close();
                return false;
            }        
        }

        //elimina un cliente de la base de datos
        public bool Eliminar(String idCliente) {
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            try {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "EliminarCliente";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlParameter spElimina = new SqlParameter();
                spElimina.ParameterName = "@id_cliente";
                spElimina.Value = idCliente;
                spElimina.Direction = System.Data.ParameterDirection.Input;
                spElimina.DbType = System.Data.DbType.String;

                cmd.Parameters.Add(spElimina);

                cmd.ExecuteNonQuery();

                conn.Close();
                return true;
            }
            catch (Exception e)
            {
                conn.Close();
                return false;
            }
        }

        //Consulta todos los clientes de la base de datos usuario y los devuelve en una lista
        public List<Cliente> ConsultarClientes()
        {
            List<Cliente> lista = new List<Cliente>();
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            try {

                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "ConsultarCliente";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlDataReader reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    Cliente cliente = new Cliente();
                    cliente.IdCliente = Convert.ToInt32(reader.GetValue(0));
                    cliente.UserName = Convert.ToString(reader.GetValue(1));
                    cliente.Nombre = Convert.ToString(reader.GetValue(2));
                    cliente.ApellidoPat = Convert.ToString(reader.GetValue(3));
                    cliente.ApellidoMat = Convert.ToString(reader.GetValue(4));
                    cliente.Identificacion = Convert.ToString(reader.GetValue(5));
                    cliente.Nacionalidad = Convert.ToString(reader.GetValue(6));
                    cliente.Email = Convert.ToString(reader.GetValue(7));
                    lista.Add(cliente);
                }

                conn.Close();
                return lista;
            }
            catch (Exception e)
            {
                lista = null;
                conn.Close();
                return lista;
            }
        }

        //selecciona un cliente de la base de datos, usando el parametro id
        public Cliente consultaIdCliente(String idCliente) {
            Cliente c = new Cliente();
            Conexion conecta = new Conexion();
            SqlConnection conn = conecta.Conectar();

            try {
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "ConsultarCliente";
                cmd.CommandType = System.Data.CommandType.StoredProcedure;
                cmd.Connection = conn;

                SqlParameter spConsulta = new SqlParameter();
                spConsulta.ParameterName = "@userName";
                spConsulta.Value = idCliente;
                spConsulta.Direction = System.Data.ParameterDirection.Input;
                spConsulta.DbType = System.Data.DbType.String;

                cmd.Parameters.Add(spConsulta);

                SqlDataReader reader = cmd.ExecuteReader();
                //SqlDataAdapter reader = new SqlDataAdapter(cmd);//

                while (reader.Read())
                {
                    c.IdCliente = Convert.ToInt32(reader.GetValue(0));
                    c.UserName = Convert.ToString(reader.GetValue(1));
                    c.Nombre = Convert.ToString(reader.GetValue(2));
                    c.ApellidoPat = Convert.ToString(reader.GetValue(3));
                    c.ApellidoMat = Convert.ToString(reader.GetValue(4));
                    c.Identificacion = Convert.ToString(reader.GetValue(5));
                    c.Nacionalidad = Convert.ToString(reader.GetValue(6));
                    c.Email = Convert.ToString(reader.GetValue(7));
                }

                conn.Close();
                return c;
            }
            catch (Exception e)
            {
                c = null;
                conn.Close();
                return c;
            }
        
        }
    }
}
